package br.pb.sistcomp.controller;

import br.pb.sistcomp.dao.PessoaDaoImpl;
import br.pb.sistcomp.entity.Pessoa;
import br.pb.sistcomp.exception.ErroAoSalvarException;
import br.pb.sistcomp.exception.ErroObjetoNull;
import br.pb.sistcomp.util.MessagesUtil;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

/**
 * Class that represents an entity in the system
 *
 * @author Diego S, www.diegosousa.com
 * @version 1.0
 *
 * Copyright (C) 2011 SistComp.
 */
/**
 *
 * Annotations Jsf
 *
 */
@ManagedBean //Recebe, executa e retorna os dados enviados pelo usuario através da telas da aplicação
@SessionScoped
public class PessoaController {

    private Pessoa pessoa;
    private Pessoa pessoaComparaSenha;
    private PessoaDaoImpl pessoaDao;
    private DataModel modelPessoas;

    /** Class constructor */
    public PessoaController() {
        pessoaDao = new PessoaDaoImpl();
        pessoa = new Pessoa();
        pessoaComparaSenha = new Pessoa("", "", "", "", "", "", "");//sera que isso é feio? Fiz isso para comparar a senha.
    }

    public DataModel carregarPessoas() {
        modelPessoas = new ListDataModel(pessoaDao.listarTodos());
        return modelPessoas;
    }

    /* used to get a person*/
    public Pessoa getPessoa() {

        return pessoa;
    }

    /* used to set a person*/
    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    public Pessoa getPessoaComparaSenha() {
        return pessoaComparaSenha;
    }

    public void setPessoaComparaSenha(Pessoa pessoa) {
        this.pessoaComparaSenha = pessoa;
    }

    public String validarLogin() {

        Pessoa pessoaAutenticada = pessoaDao.validarLogin(pessoa.getLogin(), pessoa.getSenha());

        if (pessoaAutenticada != null) {
            pessoaAutenticada.getNome();
            MessagesUtil.addInfoMsg("Bem-vindo, "+ pessoaAutenticada.getNome());
            return "/restrito/layout/template";
        } else {
            MessagesUtil.addErroMsg("Login ou senha incorreta!");
            return "/layout/templateNormal";
        }
    }


    /* add someone*/
    public String inserirPessoa() throws ErroAoSalvarException {
        try {
            if (pessoa.getSenha().equals(pessoaComparaSenha.getSenha())) {
                pessoaDao.salvar(pessoa);
                pessoa = new Pessoa();
                return "/layout/templateNormal";//tela login

            } else {
                MessagesUtil.addErroMsg("Senhas não conferem!");
                return "/pessoa/telaCadastrarPessoa";
            }
        } catch (Exception e) {
            e.getMessage();
            return "/pessoa/telaCadastrarPessoa";
        }
    }

    /* remove someone*/
    public String deletarPessoa() {
        pessoa = (Pessoa) modelPessoas.getRowData();
        pessoaDao.deletar(pessoa);
        return "telaListarPessoa";

    }

    /* List all someone*/
    public String listarPessoas() {
        modelPessoas = carregarPessoas();
        return "telaListarPessoa";
    }

    public Pessoa pegarLInhaTabela() {//usado para pegar os dados de uma linha da tabela.
        pessoa = (Pessoa) modelPessoas.getRowData();
        return pessoa;
    }

    public String editar() {

        pessoa = pegarLInhaTabela();
        return "telaUpdatePessoa";
    }

    public String editarPessoa() {
        pessoaDao.updatePessoa(pessoa);
        return "telaListarPessoa";
    }

    //retorna a lista da coluna passadas por parametro
    public List<Pessoa> listaPorColuna(String coluna) {
        return pessoaDao.listarColunaEspecifica(coluna);
    }
}
